性能

Drill 被设计用于大型数据集上,且拥有高性能。以下核心元素来展示 Drill 处理过程的高性能:

分布式引擎

Drill 提供了一个强大的分布式执行引擎用于处理查询。用户能够在集群中的任意节点提交请求。你可以将新节点添加到集群中,以支持更多的用户或提高性能,以支持更多的数据量。

纵向执行

使用一个分层的内存数据模型,对纵向存储和执行进行了优化。当工作于纵向格式的数据做存储时,比如 Parquet,Drill 为了避免接触磁盘,它不参与列查询。在无行时,Drill 执行层也会直接执行 SQL,去处理列数据。纵向存储和直接纵向执行,这种优化能够明显的降低内存消耗,并且提供更快执行效率来满足一些 BI 和分析类的工具。

矢量化

在同一时间中,并不是运行单个值在单个表记录当中,矢量化在 Drill 中运行 CPU 去操作矢量,这样称为一个记录批处理。一个记录批处理从许多不同的记录中,提取一组值。对矢量化处理效率的技术基础来源于现代化的 deep-pipelined CPU 设计。在传统的数据库引擎中,保持所有的管道都要达到峰值性能是不可能实现的,主要是由于代码的复杂度。

运行时编译

运行时编译比解释性执行能够更快地执行。Drill 为每一个查询生成高效的自定义代码。下图显示了 Drill 编译/代码生成地过程:

58

管道查询执行

使用一种可行地执行模型去处理查询,Drill 在查询时出现异常所耗费地时间非常地短。Drill 创建边界和检查点不会耗时,以便减少恢复时间。在一个单一地查询失败后,查询是可以复用地。Drill 执行使用地是一个管道模型,所有地任务都是按照计划进行的。查询的执行发生在内存中,尽可能多地通过任务管道移动数据,如果出现内存溢出,则持久化到磁盘。